package com.jk.common.utils;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.crypto.SecretKey;
import java.util.Date;

@Component
public class JwtUtil {


    private final SecretKey secretKey;
    private final long jwtExpiration;

    @Autowired
    public JwtUtil(SecretKey jwtSecret, long jwtExpiration) {
        // 初始化 SecretKey，确保在应用启动时创建一次
        this.secretKey = jwtSecret;
        this.jwtExpiration = jwtExpiration;
    }

    /**
     * 生成 Token
     *
     * @param jsonStr 登录信息串
     * @return Token 字符串
     */
    public String generateToken(String jsonStr) {
        return Jwts.builder()
                .setSubject(jsonStr)
                // 设置签发时间
                .setIssuedAt(new Date())
                // 设置过期时间
                .setExpiration(new Date(System.currentTimeMillis() + jwtExpiration))
                // 使用密钥签名
                .signWith(secretKey, SignatureAlgorithm.HS256)
                .compact();
    }

    /**
     * 验证 Token 并解析用户名
     *
     * @param token Token 字符串
     * @return 用户名
     */
    public String validateToken(String token) {
        return Jwts.parserBuilder()
                .setSigningKey(secretKey)
                .build()
                .parseClaimsJws(token)
                .getBody()
                .getSubject();
    }
}